
import { getToken, setToken, removeToken } from "@/utils/auth";
import { getUser, setUser, removeUser } from "@/utils/auth";
import Vue from "vue"
import api from "@/api/user"

const user = {
  state: {
    token: getToken(),
    id: "",
    name: "",
    avatar: "",
    userinfo:{}
  },

  mutations: {
    SET_TOKEN: (state, token) => {
      state.token = token;
    },
    SET_ID: (state, id) => {
      state.id = id;
    },
    SET_NAME: (state, name) => {
      state.name = name;
    },
    SET_AVATAR: (state, avatar) => {
      state.avatar = avatar;
    },
    SET_USERINFO: (state, userinfo) => {
      state.userinfo = userinfo;
    },
  },

  actions: {
    // 登录
    UserLogin({ commit }, userInfo) {
      console.log("用户登录:",userInfo)
      const account = userInfo.account.trim();
      const password = userInfo.password;
      return new Promise((resolve, reject) => {
        api.Login(userInfo)
          .then((res) => {
            
            // 设置 token 到cookie中
            setToken(res.data.userinfo.token);
            // 提交 token
            commit("SET_TOKEN", res.data.userinfo.token);
            // 提交其他信息
            commit("SET_ID", res.data.userinfo.id);
            commit("SET_NAME", res.data.userinfo.username);
            commit("SET_AVATAR", res.data.userinfo.avatar);
            commit("SET_USERINFO", res.data.userinfo);
            // 设置 user 信息到 tokey 中去
            setUser(res.data.userinfo);
            console.log("登录成功以后:",res.data.userinfo)
            resolve();
          })
          .catch((error) => {
            reject(error);
          });
      });
    },

    // 用户注册,注册成功后(注册成功相当于登录)
    UserRegister({ commit }, userInfo){
      return new Promise((resolve, reject) => {
        api.Register(userInfo)
          .then((res) => {
            
            // 设置 token 到cookie中
            setToken(res.data.userinfo.token);
            // 提交 token
            commit("SET_TOKEN", res.data.userinfo.token);
            // 提交其他信息
            commit("SET_ID", res.data.userinfo.id);
            commit("SET_NAME", res.data.userinfo.username);
            commit("SET_AVATAR", res.data.userinfo.avatar);
            commit("SET_USERINFO", res.data.userinfo);
            // 设置 user 信息到 tokey 中去
            setUser(res.data.userinfo);
            console.log("登录成功以后:",res.data.userinfo)
            resolve();
          })
          .catch((error) => {
            reject(error);
          });
      });
    },

    // 获取用户信息
    // // GetInfo({ commit, state }) {
    // //   return new Promise((resolve, reject) => {
    // //     getInfo()
    // //       .then((res) => {
    // //         const user = res.user;
    // //         const avatar =
    // //           user.avatar == "" || user.avatar == null
    // //             ? ""
    // //             : process.env.VUE_APP_BASE_API + user.avatar;
    // //         if (res.roles && res.roles.length > 0) {
    // //           // 验证返回的roles是否是一个非空数组
    // //           commit("SET_ROLES", res.roles);
    // //           commit("SET_PERMISSIONS", res.permissions);
    // //         } else {
    // //           commit("SET_ROLES", ["ROLE_DEFAULT"]);
    // //         }
    // //         commit("SET_ID", user.userId);
    // //         commit("SET_NAME", user.userName);
    // //         commit("SET_AVATAR", avatar);
    // //         resolve(res);
    // //       })
    // //       .catch((error) => {
    // //         reject(error);
    // //       });
    // //   });
    // },

    // 退出系统
    LogOut({ commit, state }) {
      return new Promise((resolve, reject) => {
        api.LoginOut()
          .then(() => {
            // 退出登录,清空缓存和cookie
            commit("SET_TOKEN", "");
            // commit("SET_ROLES", []);
            // commit("SET_PERMISSIONS", []);

            commit("SET_ID", "");
            commit("SET_NAME", "");
            commit("SET_AVATAR", "");
            commit("SET_USERINFO", null);

            removeToken();
            // 删除用户缓存
            removeUser();
            resolve();
          })
          .catch((error) => {
            reject(error);
          });
      });
    },

    // 前端 登出
    FedLogOut({ commit }) {
      return new Promise((resolve) => {
        commit("SET_TOKEN", "");

        // 删除token
        removeToken();
        resolve();
      });
    },
  },
};

export default user;
